package com.example.sudoku;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    // 定义跳转至游戏界面的函数，传递的参数mode代表难度
    protected void MainToGame(int mode) {
        // 以某种难度开始游戏，由i决定
        // 创建新的Intent
        Intent intent = new Intent();
        // 设置传递参数
        intent.putExtra("mode", String.valueOf(mode));
        // 设置跳转的源Activity和目的Activity
        intent.setClass(MainActivity.this, GameActivity.class);

        // 弹出对话框
        new AlertDialog.Builder(MainActivity.this)
            // 设定输出信息
            .setMessage("是否开启辅助功能？\n开启辅助可以帮助判断，使难度降低")
            // 设定积极按钮及重写OnClick函数
            .setPositiveButton("是", (dialog, which) -> {
                // 设置开启辅助，传递对应参数1
                intent.putExtra("help", String.valueOf(1));
                // 开始Intent，即开始跳转
                MainActivity.this.startActivity(intent);
                // 关闭MainActivity
                MainActivity.this.finish();
            })
            // 设定消极按钮及重写OnClick函数
            .setNegativeButton("否", (dialog, which) -> {
                // 设置关闭辅助，传递对应参数0
                intent.putExtra("help", String.valueOf(0));
                // 开始Intent，即开始跳转
                MainActivity.this.startActivity(intent);
                // 关闭MainActivity
                MainActivity.this.finish();
            })
            .show();
    }

    // 重写OnCreate函数
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 绘制开始界面
        setContentView(R.layout.begin);

        // 设置排行榜保存的Context
        save.setContext(MainActivity.this);

        // 找到对应的Button，返回VIEW，若有必要可以用Button进行强转
        Button begin_game = this.findViewById(R.id.begin_button);
        Button exit_game = this.findViewById(R.id.exit_button);
        Button rank_button = this.findViewById(R.id.rank_button);
        Button easy_begin = this.findViewById(R.id.easy_button);
        Button normal_begin = this.findViewById(R.id.normal_button);
        Button hard_begin = this.findViewById(R.id.hard_button);
        Button crazy_begin = this.findViewById(R.id.crazy_button);
        Button positive_exit = this.findViewById(R.id.positive_button);
        Button negative_exit = this.findViewById(R.id.negative_button);

        // 绑定监听，匿名内部类
        // 监听：开始游戏按钮
        // 利用lambda表达式简化
        begin_game.setOnClickListener((View view) -> {
            // 设置子按钮
            if(easy_begin.getVisibility() != View.VISIBLE) {
                // 子按钮不可见，则设置可见和可用
                easy_begin.setVisibility(View.VISIBLE);
                easy_begin.setEnabled(true);
                normal_begin.setVisibility(View.VISIBLE);
                normal_begin.setEnabled(true);
                hard_begin.setVisibility(View.VISIBLE);
                hard_begin.setEnabled(true);
                crazy_begin.setVisibility(View.VISIBLE);
                crazy_begin.setEnabled(true);
            }
            else {
                // 子按钮可见，则设置不可见和不可用
                easy_begin.setVisibility(View.INVISIBLE);
                easy_begin.setEnabled(false);
                normal_begin.setVisibility(View.INVISIBLE);
                normal_begin.setEnabled(false);
                hard_begin.setVisibility(View.INVISIBLE);
                hard_begin.setEnabled(false);
                crazy_begin.setVisibility(View.INVISIBLE);
                crazy_begin.setEnabled(false);
            }
            // 设置非子按钮
            if(positive_exit.getVisibility() == View.VISIBLE) {
                // 可见则设置不可见和不可用
                positive_exit.setVisibility(View.INVISIBLE);
                positive_exit.setEnabled(false);
                negative_exit.setVisibility(View.INVISIBLE);
                negative_exit.setEnabled(false);
            }
            // 不可见不进行任何处理
        });

        // 监听：退出游戏按钮
        exit_game.setOnClickListener((View view) -> {
            // 设置子按钮
            if(positive_exit.getVisibility() != View.VISIBLE) {
                // 子按钮不可见，则设置可见和可用
                positive_exit.setVisibility(View.VISIBLE);
                positive_exit.setEnabled(true);
                negative_exit.setVisibility(View.VISIBLE);
                negative_exit.setEnabled(true);
            }
            else {
                // 子按钮可见，则设置不可见和不可用
                positive_exit.setVisibility(View.INVISIBLE);
                positive_exit.setEnabled(false);
                negative_exit.setVisibility(View.INVISIBLE);
                negative_exit.setEnabled(false);
            }
            // 设置非子按钮
            if(easy_begin.getVisibility() == View.VISIBLE) {
                // 可见则设置不可见和不可用
                easy_begin.setVisibility(View.INVISIBLE);
                easy_begin.setEnabled(false);
                normal_begin.setVisibility(View.INVISIBLE);
                normal_begin.setEnabled(false);
                hard_begin.setVisibility(View.INVISIBLE);
                hard_begin.setEnabled(false);
                crazy_begin.setVisibility(View.INVISIBLE);
                crazy_begin.setEnabled(false);
            }
            // 不可见不进行任何处理
        });

        // 监听：排行榜按钮
        rank_button.setOnClickListener((View view) -> {
            // 创建新的Intent
            Intent intent = new Intent();
            // 设置跳转的源Activity和目的Activity
            intent.setClass(MainActivity.this, RankActivity.class);
            // 开始Intent，即开始跳转
            MainActivity.this.startActivity(intent);
            // 关闭MainActivity
            MainActivity.this.finish();
        });

        // 监听：简单按钮
        easy_begin.setOnClickListener((View view) -> {
            // 传递参数：0 表示简单难度
            MainToGame(0);
        });

        // 监听：普通按钮
        normal_begin.setOnClickListener((View view) -> {
            // 传递参数：1 表示普通难度
            MainToGame(1);
        });

        // 监听：困难按钮
        hard_begin.setOnClickListener((View view) -> {
            // 传递参数：2 表示困难难度
            MainToGame(2);
        });

        // 监听：极难按钮
        crazy_begin.setOnClickListener((View view) -> {
            // 传递参数：3 表示极难难度
            MainToGame(3);
        });

        // 监听：确定按钮
        positive_exit.setOnClickListener((View view) -> {
            // System.exit(0), 退出程序
            android.os.Process.killProcess(android.os.Process.myPid());
        });

        // 监听：取消按钮
        negative_exit.setOnClickListener((View view) -> {
            // 设置退出子按钮不可见和不可用
            positive_exit.setVisibility(View.INVISIBLE);
            positive_exit.setEnabled(false);
            negative_exit.setVisibility(View.INVISIBLE);
            negative_exit.setEnabled(false);
        });
    }
}